package com.chen;

import org.junit.Test;

import java.io.*;

public class FileDemo {

    // 字节输入流 InputStream是接口，需要使用器实现类
    @Test
    public void testInputStreamBybyteArray() {
        try(
                // 创建连接通道
                InputStream fis = new FileInputStream("E:\\workspace-java-gitCode\\java-study\\io-study\\doc\\test1.md")
        ){
            // 读取数据：
            byte[] buf = new byte[1024];
            int len;
            while ((len=fis.read(buf))!=-1){
                String str = new String(buf,0,len);
                System.out.print(str);
            }

        } catch (Exception e){
            System.out.println("文件读取失败！");
            e.printStackTrace();
        }
    }

    // 字节输入流 InputStream是接口，需要使用器实现类
    @Test
    public void testInputStreamByAllbyte() {
        try(
                // 此处提示相对路径不正确，
                // InputStream fis = new FileInputStream("java-study\\io-study\\doc\\test1.md")
                // 此处才是正确的，因为当前定位到模块
                InputStream fis = new FileInputStream("doc\\test1.md")
                ){
            byte[] bytes = fis.readAllBytes();
            System.out.println(new String(bytes));
        } catch (Exception e) {
            System.out.println("文件读取失败！");
            e.printStackTrace();
        }
    }

    @Test
    public void testInputStreamByFile() {

        // 获取当前根目录
        System.out.println(System.getProperty("user.dir"));
    }

    // 文件字节输出流测试
    @Test
    public void testOutputStreamByFile() {
        try(
                // 创建文件输入流管道
                InputStream fis = new FileInputStream("doc\\test1.md");
                // 创建文件输出流管道
                OutputStream fos = new FileOutputStream("doc\\test2-out.md",true);
        ) {
            // 定义装字节的数组
            byte[] buf = new byte[1024];
            // 每次装字节的数量
            int len;
            while ((len=fis.read(buf))!=-1){
                // 将读出的字节写入文件
                fos.write(buf,0,len);

                System.out.println("文件复制完成!");
            }

        } catch (Exception e) {
            System.out.println("文件写入失败！");
            e.printStackTrace();
        }
    }

    @Test
    public void testReaderAndWriterByFile() {
        try(
                // 创建字符输入流
                Reader reader = new FileReader("doc\\test1.md");
                // 创建字符输出流
                Writer writer = new FileWriter("doc\\test2-out-fileWrite.md")

                // 这种模式会自动调用close(),同时，这类资源关闭的同时会刷新
                // 不用手动刷新
        ) {
            // 声明字符数组容器
            char[] buf = new char[1024];
            int len;
            while ((len=reader.read(buf))!=-1){
                writer.write(buf,0,len);
            }

            System.out.println("文件复制成功！");
        } catch (Exception e) {
            System.out.println("文件复制失败！");
        }
    }

}
